package jers;

import java.io.Serializable;
import java.rmi.RemoteException;


/**
 * Interface para um objeto {@link Job}.
 * <p>
 * Este objeto implementa o trabalho a ser executado remotamente pelo 
 * objeto {@link Service}. O objeto {@link Job} possui uma instancia do 
 * objeto {@link Result} o qual carrega o retorno gerado pelo 
 * trabalho executado.
 * <br>
 * Uma instancia do objeto {@link Job} pode ser construida pela fabrica 
 * {@link Factory}. 
 * <br>
 * Um {@link Job} e basicamente um objeto que implementa a interface 
 * {@link Serializable} e a {@link Runnable}.
 * </p>
 * 
 * @see {@link Factory}, {@link Serializable}, {@link Runnable}
 * 
 * @author 
 * 		<a href="mailto:felipe.zappala@gmail.com">
 * 			Luis Felipe Zappala
 * 		</a> [ <a href="http://lncc.br/ist">ISTCC-P</a> / 2009 ]
 */
public interface Job extends Runnable, Serializable {
	
	/**
	 * Roda o objeto {@link Job}, executando o trabalho.
	 */
	public void run();

	/**
	 * Retorna o objeto {@link Result} com os resultados gerados 
	 * pelo objeto {@link Job}.
	 * 
	 * @return 
	 * 		Uma instancia do objeto {@link Result}.
	 * @throws 
	 * 		RemoteException caso um erro ocorra. 
	 */
	public Result results();
	
}
